# 定义字典
"""
person = {"name":"王长帅","age":99,"math":100,"chinese":20}
print(person)
person = {"name":"王长帅","name":"晓楠"}
print(person)
"""
# key只能是不可变的数据类型，value的类型随意
"""
st = {(1,):"王长帅"}
print(st)
st1 = {2:"王不帅"}
print(st1)
st2 = {2:5}
print(st2)
st3 = {3:{"姓名":"王长帅"}}
print(st3)
st4 = {3:(1,2,3)}
print(st4)
st5 = {4:[11,22,33]}
print(st5)
"""
# 不可以创建字典的场景
"""
st6 = {[1,2,3]:"王长帅"}
print(st6) # TypeError: unhashable type: 'list'
st7 = {{"姓名":"王不是很帅"}:55}
print(st7) # TypeError: unhashable type: 'dict'
st8 = {{1,2,3}:"王长帅"}
print(st8) # TypeError: unhashable type: 'set'
"""
# 可以通过{}创建，dict()创建字典对象
"""
a = {"name":"王不帅","age":209,"job" :"板砖"}
b = dict(name = "王很帅",age = 109,job = "搬砖")
c = dict([("name","王不是很帅"),("age",28)])
d = {} # 创建一个空字典
e = dict() # 创建一个空字典
print(a)
print(b)
print(c)
print(d)
print(e)
"""
# 通过zip()创建字典对象
# 如何将两个列表，转变为一个列表为另外一个列表的key和value，字典形式
"""
k = ['name','job','age']
v = ['longzai',28,'搬砖']
d = dict(zip(k,v))
print(d) # {'name': 'longzai', 'job': 28, 'age': '搬砖'}
"""
# 内置方法：通过fromkeys创建值为空的字典
"""
a = dict.fromkeys(['name','age','job'])
print(a) # {'name': None, 'age': None, 'job': None}
"""
# 字典增删改查
# todo：查找 通过键获取值
# st = {"姓名":"王不是很帅的长帅","年龄":29,"地址":"沈阳",0:"来测科技"}
"""
print(st['姓名']) # 王不是很帅的长帅
print(st['年龄']) # 29
address = st['地址']
print(f"{st['姓名']}的老家是在{st['地址']},他今年{st['年龄']}岁")
# 如果输入不存在的键，查找会报错
print(st['name']) # KeyError: 'name'
"""
"""
print(st.get("年龄")) # 29
print(st.items()) # 列出所有的键值对
print(st.keys()) # 列出所有的键
print(st.values()) # 列出所有的值
print(len(st)) # 统计字典的长度
if "年龄" in st:
    print("在里")
else:
    print("不在")
"""
# todo： 增加  如果这个key存在则是修改，如果key不存在则是新增
"""
st['性别'] = "女"
print(st)
st.update({"来测19期":"沈阳旭辉中♥","phone":"1258555472"})
print(st)
"""
# todo ： 修改
"""
st['姓名'] = "王长帅"
print(st)
print(st[0])
"""
# todo： 删除
"""
del st['姓名']
print(st)
"""
"""
st.pop("姓名") # 输入key值，可以删除
print(st) #{'年龄': 29, '地址': '沈阳', 0: '来测科技'}

result = st.pop(0) # 把返回值接收
print(result) #会返回删除的对象
print(st) #{'年龄': 29, '地址': '沈阳'}

result1 = st.popitem() # 随机删除一个键值对
print(result1) # ('地址', '沈阳')
print(st) #{'年龄': 29}

st.clear() # 清空字典
print(st) # {}
"""
# 字典的遍历
"""
student_info = {"王长帅":{"age":18,"address":"吉林省吉林市"},"新入会":{"age":28,"address":"广寒宫"}}
# print(student_info)
for x in student_info: # 循环的是key
    # 王长帅
    # 新入会
    print(x)
for x in student_info.keys(): # 循环的是key
    # 王长帅 新入会
    print(x,end=" ")
print()
for x in student_info.values(): # 循环的是value
    # {"age":18,"address":"吉林省吉林市"}
    # {"age":28,"address":"广寒宫"}
    print(x)
for key,value in student_info.items(): # 遍历key和value
    print(f"{key}的个人信息是{value}")
for item in student_info.items(): # 返回的是元组
    #('王长帅', {'age': 18, 'address': '吉林省吉林市'})
    # ('新入会', {'age': 28, 'address': '广寒宫'})
    print(item)
"""
# 字典推导式 (了解)
# dict1 = {k:v for k,v in {"name":"王不是很帅",'age':[28]}.items()}
# print(dict1)

# 字典解包
dict2 = {"name":"王长帅","age":22}
# print(**dict2) # 直接print不可以
print("名字为：{name}，年龄为：{age}".format(**dict2))

# 一般都是配合函数去使用
def info(name,age):
    print(f"姓名为：{name}，年龄为：{age}")

info(**dict2)

# 元组解包
tuple1 = (1,2,3)

print(*tuple1)







